package 经典例题;

import java.util.HashMap;
import java.util.Map;



//给定一个字符串，请你找出其中不含有重复字符的 最长子串 的长度。
public class 无重复字符的最长子串 {
    public static void main(String[] args) {
         String s="abcdefg";
        int i = lengthOfLongestSubstring(s);
        System.out.println(i);
    }
    //滑动窗口，太nb了
    public static int lengthOfLongestSubstring(String s) {
        int len=s.length(),ans=0;
        Map<Character, Integer> map = new HashMap<Character, Integer>();
        for(int start=0,end=0;end<len;end++){
            char c = s.charAt(end);
            //如果字典中包含这个字符，移动start指针
            if (map.containsKey(c))
               start=Math.max(start,map.get(c)+1);
            //更新最大长度，一直想不到
            ans=Math.max(end-start+1,ans);
            //不包含这个字符，则添加进字典中
            map.put(c,end);
        }
        return ans;
    }
}
